package com.pangu.converter.mapstruct;

import org.mapstruct.InheritConfiguration;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.MapperConfig;
import org.mapstruct.Mapping;

import java.util.List;
import java.util.stream.Stream;

/**
 * @author Linbizhao
 * @description: 对象转换器
 * @since 2023/11/24 11:06
 */
@MapperConfig
public interface BaseMapper<S, T> {

    /**
     * 正向对象转换
     *
     * @param var1 原对象
     * @return T   目标对象
     */
    @Mapping(target = "created", dateFormat = "yyyy-MM-dd HH:mm:ss")
    T source2Target(S var1);

    /**
     * 反向对象转换
     *
     * @param var1 原对象
     * @return S   目标对象
     */
    @InheritInverseConfiguration(name = "source2Target")
    S target2Source(T var1);

    /**
     * 映射同名属性，集合形式
     *
     * @param var1 原集合对象
     * @return List<T>   目标集合对象
     */
    @InheritConfiguration(name = "sourceToTarget")
    List<T> sourceToTarget(List<S> var1);

    /**
     * 反向，映射同名属性，集合形式
     *
     * @param var1 原集合对象
     * @return List<S>  目标集合对象
     */
    @InheritConfiguration(name = "targetToSource")
    List<S> targetToSource(List<T> var1);

    /**
     * 映射同名属性，集合流形式
     *
     * @param stream
     * @return
     */
    List<T> sourceToTarget(Stream<S> stream);

    /**
     * 反向，映射同名属性，集合流形式
     *
     * @param stream
     * @return
     */
    List<S> targetToSource(Stream<T> stream);
}
